home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Environments / PowerMacOberon feb96 / Source / Out.Mod (.txt) < prev    next >
Encoding:
Oberon Text  |  1994-09-21  |  2.9 KB  |  118 lines  |  [TEXT/.Ob4]

  1. Syntax10.Scn.Fnt
  2. MODULE Out;    (* HM 18 March 1994 *)
  3. IMPORT Display, Viewers, Texts, TextFrames, MenuViewers, Oberon;
  4.     out: Texts.Text;
  5.     v: Viewers.Viewer;
  6.     w: Texts.Writer;
  7. PROCEDURE Open*;
  8.     VAR x, y: INTEGER;
  9. BEGIN
  10.     Oberon.AllocateSystemViewer(0, x, y);
  11.     out := TextFrames.Text("");
  12.     v := MenuViewers.New(
  13.         TextFrames.NewMenu("Standard Output",
  14.             "^Out.Menu.Text"),
  15.         TextFrames.NewText(out, 0), 
  16.         TextFrames.menuH, x, y)
  17. END Open;
  18. PROCEDURE Close*;
  19. BEGIN
  20.     out := Oberon.Log; v := NIL
  21. END Close;
  22. PROCEDURE CheckOpen;
  23. BEGIN
  24.     IF (out # Oberon.Log) & (v.state = 0) THEN Open END
  25. END CheckOpen;
  26. PROCEDURE CheckScroll (t: Texts.Text);
  27.     VAR x: INTEGER; v: Viewers.Viewer; f: Display.Frame; f1: TextFrames.Frame; r: Texts.Reader; ch: CHAR;
  28. BEGIN
  29.     x := 0;
  30.     WHILE x < Display.Width DO
  31.         v := Viewers.This(x, 0);
  32.         WHILE v.state > 1 DO
  33.             f := v.dsc;
  34.             WHILE (f # NIL) & (f IS TextFrames.Frame) DO
  35.                 f1 := f(TextFrames.Frame);
  36.                 IF (f1.text = t) & (f1.H > 0) THEN
  37.                     WHILE t.len > TextFrames.Pos(f1, f1.X + f1.W - 1, f1.Y + 1) DO
  38.                         Texts.OpenReader(r, t, f1.org);
  39.                         REPEAT Texts.Read(r, ch) UNTIL r.eot OR (ch = 0DX);
  40.                         TextFrames.Show(f1, Texts.Pos(r));
  41.                     END
  42.                 END;
  43.                 f := f.next
  44.             END;
  45.             v := Viewers.Next(v)
  46.         END;
  47.         x := x + v.W
  48. END CheckScroll;
  49. (*commands*)
  50. PROCEDURE Char* (ch: CHAR);
  51. BEGIN
  52.     CheckOpen; Texts.Write(w, ch); Texts.Append(out, w.buf)
  53. END Char;
  54. PROCEDURE Int* (i, n: LONGINT);
  55. BEGIN
  56.     CheckOpen; Texts.WriteInt(w, i, n); Texts.Append(out, w.buf)
  57. END Int;
  58. PROCEDURE Real* (r: REAL; n: INTEGER);
  59. BEGIN
  60.     CheckOpen; Texts.WriteReal(w, r, n); Texts.Append(out, w.buf)
  61. END Real;
  62. PROCEDURE LongReal* (r: LONGREAL; n: INTEGER);
  63. BEGIN
  64.     CheckOpen; Texts.WriteLongReal(w, r, n); Texts.Append(out, w.buf)
  65. END LongReal;
  66. PROCEDURE Ln*;
  67.     VAR f: TextFrames.Frame;
  68. BEGIN
  69.     CheckOpen; Texts.WriteLn(w); Texts.Append(out, w.buf);
  70.     CheckScroll(out)
  71. END Ln;
  72. PROCEDURE String* (s: ARRAY OF CHAR);
  73.     VAR i: INTEGER;
  74. BEGIN
  75.     CheckOpen; i := 0;
  76.     WHILE s[i] # 0X DO
  77.         IF s[i] = "$" THEN Ln ELSE Texts.Write(w, s[i]) END;
  78.         INC(i)
  79.     END;
  80.     Texts.Append(out, w.buf)
  81. END String;
  82. PROCEDURE F0 (s: ARRAY OF CHAR; x: ARRAY OF LONGINT);
  83.     VAR i, j: INTEGER;
  84. BEGIN
  85.     CheckOpen; i := 0; j := 0;
  86.     WHILE s[i] # 0X DO
  87.         IF s[i] = "$" THEN Ln
  88.         ELSIF s[i] = "#" THEN Int(x[j], 0); INC(j)
  89.         ELSE Texts.Write(w, s[i])
  90.         END;
  91.         INC(i)
  92.     END;
  93.     Texts.Append(out, w.buf)
  94. END F0;
  95. PROCEDURE F* (s: ARRAY OF CHAR; x: LONGINT);
  96.     VAR a: ARRAY 4 OF LONGINT;
  97. BEGIN
  98.     a[0] := x; F0(s, a)
  99. END F;
  100. PROCEDURE F2* (s: ARRAY OF CHAR; x, y: LONGINT);
  101.     VAR a: ARRAY 4 OF LONGINT;
  102. BEGIN
  103.     a[0] := x; a[1] := y; F0(s, a)
  104. END F2;
  105. PROCEDURE F3* (s: ARRAY OF CHAR; x, y, z: LONGINT);
  106.     VAR a: ARRAY 4 OF LONGINT;
  107. BEGIN
  108.     a[0] := x; a[1] := y; a[2] := z; F0(s, a)
  109. END F3;
  110. PROCEDURE F4* (s: ARRAY OF CHAR; x, y, z, u: LONGINT);
  111.     VAR a: ARRAY 4 OF LONGINT;
  112. BEGIN
  113.     a[0] := x; a[1] := y; a[2] := z; a[3] := u; F0(s, a)
  114. END F4;
  115. BEGIN
  116.     Texts.OpenWriter(w); out := Oberon.Log; v := NIL
  117. END Out.
  118.